# 日程管理数据模型
from models import db
from datetime import datetime

class Event(db.Model):
    """日程事件模型"""
    __tablename__ = 'events'
    
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(200), nullable=False)  # 事件标题
    description = db.Column(db.Text)  # 事件描述
    start_time = db.Column(db.DateTime, nullable=False)  # 开始时间
    end_time = db.Column(db.DateTime)  # 结束时间
    location = db.Column(db.String(200))  # 地点
    category = db.Column(db.String(50), default='其他')  # 分类: 会议, 约会, 学习等
    color = db.Column(db.String(20), default='#4a90e2')  # 日历颜色
    is_all_day = db.Column(db.Boolean, default=False)  # 是否全天事件
    reminder_minutes = db.Column(db.Integer, default=15)  # 提前提醒分钟数
    recurrence = db.Column(db.String(20))  # 重复规则: daily, weekly, monthly
    recurrence_end = db.Column(db.DateTime)  # 重复结束日期
    created_at = db.Column(db.DateTime, default=datetime.utcnow)  # 创建时间
    updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)  # 更新时间
    
    def to_dict(self):
        """转换为字典"""
        return {
            'id': self.id,
            'title': self.title,
            'description': self.description,
            'start_time': self.start_time.isoformat(),
            'end_time': self.end_time.isoformat() if self.end_time else None,
            'location': self.location,
            'category': self.category,
            'color': self.color,
            'is_all_day': self.is_all_day,
            'reminder_minutes': self.reminder_minutes,
            'recurrence': self.recurrence,
            'recurrence_end': self.recurrence_end.isoformat() if self.recurrence_end else None,
            'created_at': self.created_at.isoformat(),
            'updated_at': self.updated_at.isoformat()
        }
    
    def __repr__(self):
        return f'<Event {self.title}>'

class EventReminder(db.Model):
    """事件提醒记录模型"""
    __tablename__ = 'event_reminders'
    
    id = db.Column(db.Integer, primary_key=True)
    event_id = db.Column(db.Integer, db.ForeignKey('events.id'), nullable=False)  # 关联事件
    reminder_time = db.Column(db.DateTime, nullable=False)  # 提醒时间
    sent = db.Column(db.Boolean, default=False)  # 是否已发送
    sent_at = db.Column(db.DateTime)  # 发送时间
    created_at = db.Column(db.DateTime, default=datetime.utcnow)  # 创建时间
    
    def to_dict(self):
        """转换为字典"""
        return {
            'id': self.id,
            'event_id': self.event_id,
            'reminder_time': self.reminder_time.isoformat(),
            'sent': self.sent,
            'sent_at': self.sent_at.isoformat() if self.sent_at else None,
            'created_at': self.created_at.isoformat()
        }
    
    def __repr__(self):
        return f'<EventReminder for Event {self.event_id}>'

